<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  

  
  <title>个人博客</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <meta property="og:type" content="website">
<meta property="og:title" content="个人博客">
<meta property="og:url" content="http://codercheng.cn/page/5/index.html">
<meta property="og:site_name" content="个人博客">
<meta property="og:locale" content="zh_CN">
<meta property="article:author" content="CoderCheng">
<meta name="twitter:card" content="summary">
  
    <link rel="alternate" href="/atom.xml" title="个人博客" type="application/atom+xml">
  
  
    <link rel="icon" href="/favicon.png">
  
  
    <link href="//fonts.lug.ustc.edu.cn/css?family=Source+Code+Pro" rel="stylesheet" type="text/css">
  
  
<link rel="stylesheet" href="/css/style.css">

<meta name="generator" content="Hexo 4.2.1"></head>

<body>
  <div id="container">
    <div id="wrap">
      <header id="header">
  <div id="banner"></div>
  <div id="header-outer" class="outer">
    <div id="header-title" class="inner">
      <h1 id="logo-wrap">
        <a href="/" id="logo">个人博客</a>
      </h1>
      
    </div>
    <div id="header-inner" class="inner">
      <nav id="main-nav">
        <a id="main-nav-toggle" class="nav-icon"></a>
        
          <a class="main-nav-link" href="/">Home</a>
        
          <a class="main-nav-link" href="/archives">Archives</a>
        
      </nav>
      <nav id="sub-nav">
        
          <a id="nav-rss-link" class="nav-icon" href="/atom.xml" title="RSS Feed"></a>
        
        <a id="nav-search-btn" class="nav-icon" title="搜索"></a>
      </nav>
      <div id="search-form-wrap">
        <form action="//google.com/search" method="get" accept-charset="UTF-8" class="search-form"><input type="search" name="q" class="search-form-input" placeholder="Search"><button type="submit" class="search-form-submit">&#xF002;</button><input type="hidden" name="sitesearch" value="http://codercheng.cn"></form>
      </div>
    </div>
  </div>
</header>
      <div class="outer">
        <section id="main">
  
    <article id="post-Tomcat体系结构（图⽂并茂）" class="article article-type-post" itemscope itemprop="blogPost">
  <div class="article-meta">
    <a href="/2020/09/28/Tomcat%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84%EF%BC%88%E5%9B%BE%E2%BD%82%E5%B9%B6%E8%8C%82%EF%BC%89/" class="article-date">
  <time datetime="2020-09-28T15:11:24.270Z" itemprop="datePublished">2020-09-28</time>
</a>
    
  <div class="article-category">
    <a class="article-category-link" href="/categories/Tomcat/">Tomcat</a>
  </div>

  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="article-title" href="/2020/09/28/Tomcat%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84%EF%BC%88%E5%9B%BE%E2%BD%82%E5%B9%B6%E8%8C%82%EF%BC%89/">Tomcat体系结构（图⽂并茂）</a>
    </h1>
  

      </header>
    
    <div class="article-entry" itemprop="articleBody">
      
        <p>​                                                  <strong>Tomcat体系结构（图⽂并茂）</strong> </p>
<p>Tomcat 设计了两个核心组件连接器（<strong>Connector</strong>）和容器（<strong>Container</strong>）来完成 Tomcat 的两大核心功能。</p>
<p>连接器，负责对外交流： 处理Socket连接，负责⽹络字节流与Request和Response对象的转化；</p>
<p>容器，负责内部处理：加载和管理Servlet，以及具体处理Request请求；</p>
<p><img src="https://gitee.com/adc123321/blog_img/raw/master/image/202010/10/135149-426752.jpeg" alt></p>
<ul>
<li><strong>EndPoint</strong></li>
</ul>
<p>EndPoint 是 Coyote 通信端点，即通信监听的接⼝，是具体Socket接收和发送处理器，是对传输层的抽象，因此EndPoint用来实现TCP/IP协议的。</p>
<ul>
<li><strong>Processor</strong></li>
</ul>
<p>Processor 是Coyote 协议处理接口 ，如果说EndPoint是⽤来实现TCP/IP协议的，那么Processor用来实现HTTP协议，Processor接收来自EndPoint的Socket，读取字节流解析成Tomcat Request和Response对象，并通过Adapter将其提交到容器处理，Processor是对应用层协议的抽象。</p>
<ul>
<li><strong>ProtocolHandler</strong></li>
</ul>
<p>Coyote 协议接口， 通过Endpoint 和 Processor ， 实现针对具体协议的处理能力。Tomcat 按照协议和I/O 提供6个实现类：AjpNioProtocol ，AjpAprProtocol， AjpNio2Protocol ， Http11NioProtocol，Http11Nio2Protocol ，Http11AprProtocol。</p>
<ul>
<li><strong>Adapter</strong></li>
</ul>
<p>由于协议不同，客户端发过来的请求信息也不尽相同，Tomcat定义了自己的Request类来封装这些请求信息。ProtocolHandler接口负责解析请求并生成Tomcat Request类。但是这个Request对象不是标准ServletRequest，不能用Tomcat Request作为参数来调⽤容器。Tomcat设计者的解决方⽅案是引入CoyoteAdapter，这是适配器模式的经典运用，连接器调用CoyoteAdapter的Sevice方法，传入的是Tomcat Request对象，CoyoteAdapter负责将Tomcat Request转成ServletRequest，再调用容器。</p>
<h4 id="Tomcat-Servlet-容器-Catainlina"><a href="#Tomcat-Servlet-容器-Catainlina" class="headerlink" title="Tomcat Servlet 容器 Catainlina"></a>Tomcat Servlet 容器 Catainlina</h4><p>Tomcat就是一个Catalina的实例，因为Catalina是Tomcat的核心</p>
<p>Tomcat/Catalina实例</p>
<ul>
<li>Catalina</li>
</ul>
<p>负责解析Tomcat的配置文件（server.xml） , 以此来创建服务器Server组件并进行管理</p>
<p><img src="https://gitee.com/adc123321/blog_img/raw/master/image/202010/10/135359-556021.jpeg" alt></p>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"> <span class="meta">&lt;?xml version='1.0' encoding='utf­8'?&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">Server</span> <span class="attr">port</span>=<span class="string">"8005"</span> <span class="attr">shutdown</span>=<span class="string">"SHUTDOWN"</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">Service</span> <span class="attr">name</span>=<span class="string">"Catalina"</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">Connector</span> <span class="attr">port</span>=<span class="string">"8080"</span> <span class="attr">protocol</span>=<span class="string">"HTTP/1.1"</span> <span class="attr">connectionTimeout</span>=<span class="string">"20000"</span></span></span><br><span class="line"><span class="tag"><span class="attr">redirectPort</span>=<span class="string">"8443"</span> <span class="attr">URIEncoding</span>=<span class="string">"UTF­8"</span>/&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">Engine</span> <span class="attr">name</span>=<span class="string">"Catalina"</span> <span class="attr">defaultHost</span>=<span class="string">"localhost"</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">Host</span> <span class="attr">name</span>=<span class="string">"localhost"</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">Context</span> <span class="attr">path</span>=<span class="string">""</span> <span class="attr">docBase</span>=<span class="string">"/"</span> <span class="attr">reloadable</span>=<span class="string">"true"</span>/&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">Host</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">Engine</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">Service</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">Server</span>&gt;</span></span><br></pre></td></tr></table></figure>

<p> (1) <strong>Server</strong><br>Server表示整个的Catalina Servlet容器。Tomcat提供了Server接口的一个默认实现，这通常不需要用户自己去实现。在Server容器中，可以包含一个或多个Service组件。<br>(2) <strong>Service</strong><br>Service是存活在Server内部的中间组件，它将一个或多个连接器（Connector）组件绑定到一个单独的引擎（Engine)上。在Server中，可以包含一个或多个Service组件。Service也很少由用户定制，Tomcat提供了Service接口的默认实现，而这种实现既简单又能满足应用。<br>(3) <strong>Connector</strong><br>连接器（Connector）处理与客户端的通信，它负责接收客户请求，以及向客户返回响应结果。在Tomcat中，有多个连接 器可以使用。<br>(4) <strong>Engine</strong><br>在Tomcat中，每个Service只能包含一个Servlet引擎（Engine）。引擎表示一个特定的Service的请求处理流水线。作为一个Service可以有多个连接器，引擎从连接器接收和处理所有的请求，将响应返回给适合的连接器，通过连接器传输给用户。用户允许通过实现Engine接口提供自定义的引擎，但通常不需要这么做。<br>(5) <strong>Host</strong><br>Host表示一个虚拟主机，一个引擎可以包含多个Host。用户通常不需要创建自定义的<br>Host，因为Tomcat给出的Host接口的实现（类StandardHost）提供了重要的附加功能。<br>(6) <strong>Context</strong><br>一个Context表示了一个Web应用程序，运行在特定的虚拟主机中。什么是Web应用程序呢？在Sun公司发布的Java Servlet规范中，对Web应用程序做出了如下的定义：“一个Web应用程序是由一组Servlet、HTML页面、类，以及其他的资源组成的运行在Web服务器上的完整的应用程序。它可以在多个供应商提供的实现了Servlet规范的Web容器中运行”。一个Host可以包含多个Context（代表Web应用程序），每一个Context都有一个唯一的路径。用户 通 常 不 需 要 创 建 自 定 义 的 Context ， 因 为 Tomcat 给 出 的 Context 接 口 的 实 （ 类StandardContext）提供了重要的附加功能。</p>
<p><strong>总结</strong>  :<u>凡是实现了Servlet规范的都可以成为Servlet容器</u> 。</p>
<p>​         一个 Catalina 容器中 是有多个Server组成 而每个Server可以有多个Service,每个Service中包含  一个Engine组件，多个Connector 组件，多个Host 组件，多个Context组件 构成。</p>

      
    </div>
    <footer class="article-footer">
      <a data-url="http://codercheng.cn/2020/09/28/Tomcat%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84%EF%BC%88%E5%9B%BE%E2%BD%82%E5%B9%B6%E8%8C%82%EF%BC%89/" data-id="cko3snvwv000li8uo8tcj5amd" class="article-share-link">Share</a>
      
      
    </footer>
  </div>
  
</article>


  
    <article id="post-SpringBoot学习笔记" class="article article-type-post" itemscope itemprop="blogPost">
  <div class="article-meta">
    <a href="/2020/09/24/SpringBoot%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/" class="article-date">
  <time datetime="2020-09-24T03:34:58.653Z" itemprop="datePublished">2020-09-24</time>
</a>
    
  <div class="article-category">
    <a class="article-category-link" href="/categories/SpringBoot/">SpringBoot</a>
  </div>

  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="article-title" href="/2020/09/24/SpringBoot%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/">SpringBoot学习笔记</a>
    </h1>
  

      </header>
    
    <div class="article-entry" itemprop="articleBody">
      
        <p>SpringBoot学习笔记</p>
<p>1 约定大于配置<br>2 实现自动配置 </p>
<ol>
<li>springboot应用启动</li>
<li>@ Spring Bootapplication起作用</li>
<li>@Enableauto Configuration</li>
<li>@ AutoConfigurationpackage：这个组合注解主要是@ import( Autoconfigurationpackages. Registrar. class),它通过将 Registrar类导入到容器中，而registrar类作用是扫描主配置类同级目录以及子包，并将相应的组件导入到springboote创建管理的容器中</li>
<li>@ import( AutoConfigurationlmportselector. class):它通过将<br>Autoconfigurationlmportselector类导入到容器中， AutoConfigurationlmportselector类作用是<br>通过selectlmports方法执行的过程中，会使用内部工具类 Springfactoriesloader，查找<br>classpath上所有jar包中的META-INF/spring.factories进行加载，实现将配置类信息交给<br>Springfactory加载器进行一系列的容器创建过程  </li>
</ol>

      
    </div>
    <footer class="article-footer">
      <a data-url="http://codercheng.cn/2020/09/24/SpringBoot%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/" data-id="cko3snvwy000qi8uo9ur798ns" class="article-share-link">Share</a>
      
      
    </footer>
  </div>
  
</article>


  
    <article id="post-easypoi导出动态表头excel" class="article article-type-post" itemscope itemprop="blogPost">
  <div class="article-meta">
    <a href="/2020/09/24/easypoi%E5%AF%BC%E5%87%BA%E5%8A%A8%E6%80%81%E8%A1%A8%E5%A4%B4excel/" class="article-date">
  <time datetime="2020-09-24T03:34:58.633Z" itemprop="datePublished">2020-09-24</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="article-title" href="/2020/09/24/easypoi%E5%AF%BC%E5%87%BA%E5%8A%A8%E6%80%81%E8%A1%A8%E5%A4%B4excel/">easypoi导出动态表头excel</a>
    </h1>
  

      </header>
    
    <div class="article-entry" itemprop="articleBody">
      
        <hr>
<h2 id="categories-easypoi"><a href="#categories-easypoi" class="headerlink" title="categories: easypoi"></a>categories: easypoi</h2><h2 id="easypoi导出动态表头excel"><a href="#easypoi导出动态表头excel" class="headerlink" title="easypoi导出动态表头excel"></a>easypoi导出动态表头excel</h2><p>注：文章转载来自  <a href="https://blog.csdn.net/ajax_yan/article/details/82289240" target="_blank" rel="noopener">https://blog.csdn.net/ajax_yan/article/details/82289240</a> </p>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="tag">&lt;<span class="name">dependency</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">groupId</span>&gt;</span>cn.afterturn<span class="tag">&lt;/<span class="name">groupId</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">artifactId</span>&gt;</span>easypoi-base<span class="tag">&lt;/<span class="name">artifactId</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">version</span>&gt;</span>3.2.0<span class="tag">&lt;/<span class="name">version</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">dependency</span>&gt;</span></span><br></pre></td></tr></table></figure>

<figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">@Test</span></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">dynaCol</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="keyword">try</span> &#123;</span><br><span class="line">        List&lt;ExcelExportEntity&gt; colList = <span class="keyword">new</span> ArrayList&lt;ExcelExportEntity&gt;();</span><br><span class="line">        ExcelExportEntity colEntity = <span class="keyword">new</span> ExcelExportEntity(<span class="string">"商品名称"</span>, <span class="string">"title"</span>);</span><br><span class="line">        colEntity.setNeedMerge(<span class="keyword">true</span>);</span><br><span class="line">        colList.add(colEntity);</span><br><span class="line"></span><br><span class="line">        colEntity = <span class="keyword">new</span> ExcelExportEntity(<span class="string">"供应商"</span>, <span class="string">"supplier"</span>);</span><br><span class="line">        colEntity.setNeedMerge(<span class="keyword">true</span>);</span><br><span class="line">        colList.add(colEntity);</span><br><span class="line"></span><br><span class="line">        ExcelExportEntity deliColGroup = <span class="keyword">new</span> ExcelExportEntity(<span class="string">"得力"</span>, <span class="string">"deli"</span>);</span><br><span class="line">        List&lt;ExcelExportEntity&gt; deliColList = <span class="keyword">new</span> ArrayList&lt;ExcelExportEntity&gt;();</span><br><span class="line">        deliColList.add(<span class="keyword">new</span> ExcelExportEntity(<span class="string">"市场价"</span>, <span class="string">"orgPrice"</span>));</span><br><span class="line">        deliColList.add(<span class="keyword">new</span> ExcelExportEntity(<span class="string">"专区价"</span>, <span class="string">"salePrice"</span>));</span><br><span class="line">        deliColGroup.setList(deliColList);</span><br><span class="line">        colList.add(deliColGroup);</span><br><span class="line"></span><br><span class="line">        ExcelExportEntity jdColGroup = <span class="keyword">new</span> ExcelExportEntity(<span class="string">"京东"</span>, <span class="string">"jd"</span>);</span><br><span class="line">        List&lt;ExcelExportEntity&gt; jdColList = <span class="keyword">new</span> ArrayList&lt;ExcelExportEntity&gt;();</span><br><span class="line">        jdColList.add(<span class="keyword">new</span> ExcelExportEntity(<span class="string">"市场价"</span>, <span class="string">"orgPrice"</span>));</span><br><span class="line">        jdColList.add(<span class="keyword">new</span> ExcelExportEntity(<span class="string">"专区价"</span>, <span class="string">"salePrice"</span>));</span><br><span class="line">        jdColGroup.setList(jdColList);</span><br><span class="line">        colList.add(jdColGroup);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">        List&lt;Map&lt;String, Object&gt;&gt; list = <span class="keyword">new</span> ArrayList&lt;Map&lt;String, Object&gt;&gt;();</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="number">0</span>; i &lt; <span class="number">10</span>; i++) &#123;</span><br><span class="line">            Map&lt;String, Object&gt; valMap = <span class="keyword">new</span> HashMap&lt;String, Object&gt;();</span><br><span class="line">            valMap.put(<span class="string">"title"</span>, <span class="string">"名称."</span> + i);</span><br><span class="line">            valMap.put(<span class="string">"supplier"</span>, <span class="string">"供应商."</span> + i);</span><br><span class="line"></span><br><span class="line">            List&lt;Map&lt;String, Object&gt;&gt; deliDetailList = <span class="keyword">new</span> ArrayList&lt;Map&lt;String, Object&gt;&gt;();</span><br><span class="line">            <span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">0</span>; j &lt; <span class="number">3</span>; j++) &#123;</span><br><span class="line">                Map&lt;String, Object&gt; deliValMap = <span class="keyword">new</span> HashMap&lt;String, Object&gt;();</span><br><span class="line">                deliValMap.put(<span class="string">"orgPrice"</span>, <span class="string">"得力.市场价."</span> + j);</span><br><span class="line">                deliValMap.put(<span class="string">"salePrice"</span>, <span class="string">"得力.专区价."</span> + j);</span><br><span class="line">                deliDetailList.add(deliValMap);</span><br><span class="line">            &#125;</span><br><span class="line">            valMap.put(<span class="string">"deli"</span>, deliDetailList);</span><br><span class="line"></span><br><span class="line">            List&lt;Map&lt;String, Object&gt;&gt; jdDetailList = <span class="keyword">new</span> ArrayList&lt;Map&lt;String, Object&gt;&gt;();</span><br><span class="line">            <span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="number">0</span>; j &lt; <span class="number">2</span>; j++) &#123;</span><br><span class="line">                Map&lt;String, Object&gt; jdValMap = <span class="keyword">new</span> HashMap&lt;String, Object&gt;();</span><br><span class="line">                jdValMap.put(<span class="string">"orgPrice"</span>, <span class="string">"京东.市场价."</span> + j);</span><br><span class="line">                jdValMap.put(<span class="string">"salePrice"</span>, <span class="string">"京东.专区价."</span> + j);</span><br><span class="line">                jdDetailList.add(jdValMap);</span><br><span class="line">            &#125;</span><br><span class="line">            valMap.put(<span class="string">"jd"</span>, jdDetailList);</span><br><span class="line"></span><br><span class="line">            list.add(valMap);</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        Workbook workbook = ExcelExportUtil.exportExcel(<span class="keyword">new</span> ExportParams(<span class="string">"价格分析表"</span>, <span class="string">"数据"</span>), colList,</span><br><span class="line">                list);</span><br><span class="line">        FileOutputStream fos = <span class="keyword">new</span> FileOutputStream(<span class="string">"D:/价格分析表.tt.xls"</span>);</span><br><span class="line">        workbook.write(fos);</span><br><span class="line">        fos.close();</span><br><span class="line">    &#125; <span class="keyword">catch</span> (FileNotFoundException e) &#123;</span><br><span class="line">        e.printStackTrace();</span><br><span class="line">    &#125; <span class="keyword">catch</span> (IOException e) &#123;</span><br><span class="line">        e.printStackTrace();</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>

<p>效果</p>
<p><img src="http://ww1.sinaimg.cn/large/c4c193b1ly1gizmhbkrkcj20kr0nu3zc.jpg" alt></p>

      
    </div>
    <footer class="article-footer">
      <a data-url="http://codercheng.cn/2020/09/24/easypoi%E5%AF%BC%E5%87%BA%E5%8A%A8%E6%80%81%E8%A1%A8%E5%A4%B4excel/" data-id="cko3snvx3000zi8uobg6rhzef" class="article-share-link">Share</a>
      
      
    </footer>
  </div>
  
</article>


  
    <article id="post-SpringMVC流程图" class="article article-type-post" itemscope itemprop="blogPost">
  <div class="article-meta">
    <a href="/2020/09/15/SpringMVC%E6%B5%81%E7%A8%8B%E5%9B%BE/" class="article-date">
  <time datetime="2020-09-15T03:21:54.741Z" itemprop="datePublished">2020-09-15</time>
</a>
    
  <div class="article-category">
    <a class="article-category-link" href="/categories/SpringMVC/">SpringMVC</a>
  </div>

  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="article-title" href="/2020/09/15/SpringMVC%E6%B5%81%E7%A8%8B%E5%9B%BE/">SpringMVC流程图</a>
    </h1>
  

      </header>
    
    <div class="article-entry" itemprop="articleBody">
      
        <p>SpringMvc流程图</p>
<p>流程说明 </p>
<p>第⼀步：⽤户发送请求⾄前端控制器DispatcherServlet </p>
<p>第⼆步：DispatcherServlet收到请求调⽤HandlerMapping处理器映射器 </p>
<p>第三步：处理器映射器根据请求Url找到具体的Handler（后端控制器），⽣成处理器对象及处理器拦截 </p>
<p>器(如果 有则⽣成)⼀并返回DispatcherServlet </p>
<p>第四步：DispatcherServlet调⽤HandlerAdapter处理器适配器去调⽤Handler </p>
<p>第五步：处理器适配器执⾏Handler </p>
<p>第六步：Handler执⾏完成给处理器适配器返回ModelAndView </p>
<p>第七步：处理器适配器向前端控制器返回 ModelAndView，ModelAndView 是SpringMVC 框架的⼀个 </p>
<p>底层对 象，包括 Model 和 View </p>
<p>第⼋步：前端控制器请求视图解析器去进⾏视图解析，根据逻辑视图名来解析真正的视图。 </p>
<p>第九步：视图解析器向前端控制器返回View </p>
<p>第⼗步：前端控制器进⾏视图渲染，就是将模型数据（在 ModelAndView 对象中）填充到 request 域 </p>
<p>第⼗⼀步：前端控制器向⽤户响应结果</p>
<p><img src="https://gitee.com/adc123321/blog_img/raw/master/image/202009/29/123653-327041.jpeg" alt></p>

      
    </div>
    <footer class="article-footer">
      <a data-url="http://codercheng.cn/2020/09/15/SpringMVC%E6%B5%81%E7%A8%8B%E5%9B%BE/" data-id="cko3snvwx000oi8uoemt3b4m7" class="article-share-link">Share</a>
      
      
    </footer>
  </div>
  
</article>


  
    <article id="post-自动化博客上传" class="article article-type-post" itemscope itemprop="blogPost">
  <div class="article-meta">
    <a href="/2020/08/24/%E8%87%AA%E5%8A%A8%E5%8C%96%E5%8D%9A%E5%AE%A2%E4%B8%8A%E4%BC%A0/" class="article-date">
  <time datetime="2020-08-24T11:29:00.469Z" itemprop="datePublished">2020-08-24</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="article-title" href="/2020/08/24/%E8%87%AA%E5%8A%A8%E5%8C%96%E5%8D%9A%E5%AE%A2%E4%B8%8A%E4%BC%A0/">自动化博客上传</a>
    </h1>
  

      </header>
    
    <div class="article-entry" itemprop="articleBody">
      
        <p>自动化测试</p>
<p> <img src="https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=2627047110,1799495614&fm=26&gp=0.jpg" alt="img"> </p>

      
    </div>
    <footer class="article-footer">
      <a data-url="http://codercheng.cn/2020/08/24/%E8%87%AA%E5%8A%A8%E5%8C%96%E5%8D%9A%E5%AE%A2%E4%B8%8A%E4%BC%A0/" data-id="cko3snvxe001li8uoafcae02n" class="article-share-link">Share</a>
      
      
    </footer>
  </div>
  
</article>


  
    <article id="post-numpy矩阵入门操作" class="article article-type-post" itemscope itemprop="blogPost">
  <div class="article-meta">
    <a href="/2020/08/24/numpy%E7%9F%A9%E9%98%B5%E5%85%A5%E9%97%A8%E6%93%8D%E4%BD%9C/" class="article-date">
  <time datetime="2020-08-24T11:29:00.468Z" itemprop="datePublished">2020-08-24</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="article-title" href="/2020/08/24/numpy%E7%9F%A9%E9%98%B5%E5%85%A5%E9%97%A8%E6%93%8D%E4%BD%9C/">numpy矩阵入门操作</a>
    </h1>
  

      </header>
    
    <div class="article-entry" itemprop="articleBody">
      
        <h2 id="numpy矩阵"><a href="#numpy矩阵" class="headerlink" title="numpy矩阵"></a>numpy矩阵</h2><p>矩阵是numpy.matrix类型的对象，该类继承自numpy.ndarray，任何针对多维数组的操作，对矩阵同样有效，但是作为子类矩阵又结合其自身的特点，做了必要的扩充，比如：乘法计算、求逆等。</p>
<h3 id="1-矩阵对象的创建"><a href="#1-矩阵对象的创建" class="headerlink" title="1. 矩阵对象的创建"></a>1. 矩阵对象的创建</h3><ol>
<li>通过ndarray创建matrix对象</li>
</ol>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">numpy.matrix(</span><br><span class="line">    ary,		<span class="comment"># 任何可被解释为矩阵的二维容器</span></span><br><span class="line">  	copy=<span class="literal">True</span>	<span class="comment"># 是否复制数据(缺省值为True，即复制数据)</span></span><br><span class="line">)</span><br></pre></td></tr></table></figure>

<ol start="2">
<li><code>numpy.mat()</code><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 等价于：numpy.matrix(..., copy=False)</span></span><br><span class="line"><span class="comment"># 由该函数创建的矩阵对象与参数中的源容器一定共享数据，无法拥有独立的数据拷贝</span></span><br><span class="line">numpy.mat(任何可被解释为矩阵的二维容器)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 该函数可以接受字符串形式的矩阵描述：</span></span><br><span class="line"><span class="comment"># 数据项通过空格分隔，数据行通过分号分隔。例如：'1 2 3; 4 5 6'</span></span><br><span class="line">numpy.mat(拼块规则)</span><br></pre></td></tr></table></figure>

</li>
</ol>
<p><strong>示例</strong></p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 创建matrix操作</span></span><br><span class="line"><span class="keyword">import</span> numpy <span class="keyword">as</span> np</span><br><span class="line"></span><br><span class="line">arr = np.arange(<span class="number">1</span>, <span class="number">10</span>).reshape(<span class="number">3</span>, <span class="number">3</span>)</span><br><span class="line">print(arr)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 第一种方式</span></span><br><span class="line">m = np.matrix(arr, copy=<span class="literal">True</span>)</span><br><span class="line">print(m, m.shape, type(m))</span><br><span class="line"></span><br><span class="line"><span class="comment"># 第二种方式:共享方式</span></span><br><span class="line">m2 = np.mat(arr)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 第三种方式</span></span><br><span class="line">m3 = np.mat(<span class="string">"1 2 3;4 5 6.0"</span>)</span><br></pre></td></tr></table></figure>

<h3 id="2-矩阵的乘法运算"><a href="#2-矩阵的乘法运算" class="headerlink" title="2. 矩阵的乘法运算"></a>2. 矩阵的乘法运算</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 矩阵乘法</span></span><br><span class="line"><span class="keyword">import</span> numpy <span class="keyword">as</span> np</span><br><span class="line"></span><br><span class="line">arr = np.array([[<span class="number">1</span>, <span class="number">1</span>, <span class="number">1</span>],</span><br><span class="line">                [<span class="number">2</span>, <span class="number">2</span>, <span class="number">2</span>],</span><br><span class="line">                [<span class="number">3</span>, <span class="number">3</span>, <span class="number">3</span>]])</span><br><span class="line"><span class="comment"># 数组相乘, 各对应位置元素相乘</span></span><br><span class="line">print(arr * arr)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 矩阵相乘，第n行乘m列之和，作为结果的n,m个元素</span></span><br><span class="line"><span class="comment"># 矩阵相乘，第一个矩阵行数必须等于第二个矩阵列数</span></span><br><span class="line">m = np.mat(arr)</span><br><span class="line">print(m * m)</span><br></pre></td></tr></table></figure>

<h3 id="3-矩阵的逆矩阵"><a href="#3-矩阵的逆矩阵" class="headerlink" title="3. 矩阵的逆矩阵"></a>3. 矩阵的逆矩阵</h3><p>若两个矩阵A、B满足：AB = E （E为单位矩阵），则称B为A的逆矩阵。</p>
<p><strong>单位矩阵</strong></p>
<ul>
<li>在矩阵的乘法中，有一种矩阵起着特殊的作用，如同数的乘法中的1，这种矩阵被称为单位矩阵。</li>
<li>它是个方阵，从左上角到右下角的对角线（称为主对角线）上的元素均为1，除此以外全都为0，记为$I_n$或$E_n$ ，通常用I或E来表示。</li>
<li>根据单位矩阵的特点，任何矩阵与单位矩阵相乘都等于本身，而且单位矩阵因此独特性有广泛用途。<br>$$<br>E_3 =<br>\left[ \begin{array}{ccc}<br>1 &amp; 0 &amp; 0\<br>0 &amp; 1 &amp; 0\<br>0 &amp; 0 &amp; 1\<br>\end{array}<br>\right ]<br>$$</li>
</ul>
        
          <p class="article-more-link">
            <a href="/2020/08/24/numpy%E7%9F%A9%E9%98%B5%E5%85%A5%E9%97%A8%E6%93%8D%E4%BD%9C/#more">Read More</a>
          </p>
        
      
    </div>
    <footer class="article-footer">
      <a data-url="http://codercheng.cn/2020/08/24/numpy%E7%9F%A9%E9%98%B5%E5%85%A5%E9%97%A8%E6%93%8D%E4%BD%9C/" data-id="cko3snvx70016i8uo013l71f3" class="article-share-link">Share</a>
      
      
    </footer>
  </div>
  
</article>


  
    <article id="post-缓存穿透" class="article article-type-post" itemscope itemprop="blogPost">
  <div class="article-meta">
    <a href="/2020/08/24/%E7%BC%93%E5%AD%98%E7%A9%BF%E9%80%8F/" class="article-date">
  <time datetime="2020-08-24T11:29:00.468Z" itemprop="datePublished">2020-08-24</time>
</a>
    
  <div class="article-category">
    <a class="article-category-link" href="/categories/%E7%9F%A5%E8%AF%86/">知识</a>
  </div>

  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="article-title" href="/2020/08/24/%E7%BC%93%E5%AD%98%E7%A9%BF%E9%80%8F/">缓存穿透</a>
    </h1>
  

      </header>
    
    <div class="article-entry" itemprop="articleBody">
      
        <p><strong>缓存穿透</strong></p>
<p>概念：是指查询数据库中一定不存在的数据。</p>
<p>栗子：一个数据库中不存在的数据 每次查询为空，每次不进行缓存。</p>
<p>解决：1 采用缓存空值的方式  设定缓存过期时间较短 比如设置60s</p>
<p>​          2  采用布隆过滤器  （Google  ,Redis  都可以实现）</p>
        
          <p class="article-more-link">
            <a href="/2020/08/24/%E7%BC%93%E5%AD%98%E7%A9%BF%E9%80%8F/#more">Read More</a>
          </p>
        
      
    </div>
    <footer class="article-footer">
      <a data-url="http://codercheng.cn/2020/08/24/%E7%BC%93%E5%AD%98%E7%A9%BF%E9%80%8F/" data-id="cko3snvxl001ti8uo1sxq38e7" class="article-share-link">Share</a>
      
      
    </footer>
  </div>
  
</article>


  
    <article id="post-hello-world" class="article article-type-post" itemscope itemprop="blogPost">
  <div class="article-meta">
    <a href="/2020/08/24/hello-world/" class="article-date">
  <time datetime="2020-08-24T11:29:00.467Z" itemprop="datePublished">2020-08-24</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="article-title" href="/2020/08/24/hello-world/">Hello World</a>
    </h1>
  

      </header>
    
    <div class="article-entry" itemprop="articleBody">
      
        <p>Welcome to <a href="https://hexo.io/" target="_blank" rel="noopener">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/" target="_blank" rel="noopener">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href="https://hexo.io/docs/troubleshooting.html" target="_blank" rel="noopener">troubleshooting</a> or you can ask me on <a href="https://github.com/hexojs/hexo/issues" target="_blank" rel="noopener">GitHub</a>.</p>
<h2 id="Quick-Start"><a href="#Quick-Start" class="headerlink" title="Quick Start"></a>Quick Start</h2><h3 id="Create-a-new-post"><a href="#Create-a-new-post" class="headerlink" title="Create a new post"></a>Create a new post</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo new <span class="string">"My New Post"</span></span><br></pre></td></tr></table></figure>

<p>More info: <a href="https://hexo.io/docs/writing.html" target="_blank" rel="noopener">Writing</a></p>
<h3 id="Run-server"><a href="#Run-server" class="headerlink" title="Run server"></a>Run server</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo server</span><br></pre></td></tr></table></figure>

<p>More info: <a href="https://hexo.io/docs/server.html" target="_blank" rel="noopener">Server</a></p>
<h3 id="Generate-static-files"><a href="#Generate-static-files" class="headerlink" title="Generate static files"></a>Generate static files</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo generate</span><br></pre></td></tr></table></figure>

<p>More info: <a href="https://hexo.io/docs/generating.html" target="_blank" rel="noopener">Generating</a></p>
<h3 id="Deploy-to-remote-sites"><a href="#Deploy-to-remote-sites" class="headerlink" title="Deploy to remote sites"></a>Deploy to remote sites</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo deploy</span><br></pre></td></tr></table></figure>

<p>More info: <a href="https://hexo.io/docs/one-command-deployment.html" target="_blank" rel="noopener">Deployment</a></p>

      
    </div>
    <footer class="article-footer">
      <a data-url="http://codercheng.cn/2020/08/24/hello-world/" data-id="cko3snvx1000ui8uoeplc7rn7" class="article-share-link">Share</a>
      
      
    </footer>
  </div>
  
</article>


  
    <article id="post-git 忽略文件" class="article article-type-post" itemscope itemprop="blogPost">
  <div class="article-meta">
    <a href="/2020/08/24/git%20%E5%BF%BD%E7%95%A5%E6%96%87%E4%BB%B6/" class="article-date">
  <time datetime="2020-08-24T11:29:00.466Z" itemprop="datePublished">2020-08-24</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="article-title" href="/2020/08/24/git%20%E5%BF%BD%E7%95%A5%E6%96%87%E4%BB%B6/">git 忽略文件</a>
    </h1>
  

      </header>
    
    <div class="article-entry" itemprop="articleBody">
      
        <hr>
<h2 id="categories-git"><a href="#categories-git" class="headerlink" title="categories: git "></a>categories: git </h2><p><strong>.gitignore忽略已提交的文件</strong></p>
<p>描述 ：需要忽略的文件已经提交</p>
<p>解决方案</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">git  rm -r --cache .</span><br><span class="line">git  add .</span><br><span class="line">git  commit -m &quot;.gitignore now work&quot;</span><br></pre></td></tr></table></figure>

<p>执行后 会发现.gitignore 文件起作用了。</p>

      
    </div>
    <footer class="article-footer">
      <a data-url="http://codercheng.cn/2020/08/24/git%20%E5%BF%BD%E7%95%A5%E6%96%87%E4%BB%B6/" data-id="cko3snvx0000ti8uo5o978a1a" class="article-share-link">Share</a>
      
      
    </footer>
  </div>
  
</article>


  
    <article id="post-SpringBoot经典学习笔记" class="article article-type-post" itemscope itemprop="blogPost">
  <div class="article-meta">
    <a href="/2020/08/24/SpringBoot%E7%BB%8F%E5%85%B8%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/" class="article-date">
  <time datetime="2020-08-24T11:29:00.465Z" itemprop="datePublished">2020-08-24</time>
</a>
    
  <div class="article-category">
    <a class="article-category-link" href="/categories/SpringBoot/">SpringBoot</a>
  </div>

  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="article-title" href="/2020/08/24/SpringBoot%E7%BB%8F%E5%85%B8%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/">SpringBoot经典学习笔记</a>
    </h1>
  

      </header>
    
    <div class="article-entry" itemprop="articleBody">
      
        <h1 id="跟武哥一起学习Spring-Boot"><a href="#跟武哥一起学习Spring-Boot" class="headerlink" title="跟武哥一起学习Spring Boot"></a>跟武哥一起学习Spring Boot</h1><h1 id="作者信息"><a href="#作者信息" class="headerlink" title="作者信息"></a>作者信息</h1><p>本课程首发于 CSDN GitChat 达人课《跟武哥一起学Spring Boot》，该文档为课程详细笔记。<br>作者：倪升武（武哥）<br>微信公众号：武哥聊编程<br><img src="https://img-blog.csdnimg.cn/202002150421550.jpg" alt="武哥聊编程"></p>
<blockquote>
<p>版权申明：本课程已经免费，但版权属于 CSDN 和作者，未经允许，不得将该笔记用于商业用途和其他不正当用途，否则追究法律责任。</p>
</blockquote>
        
          <p class="article-more-link">
            <a href="/2020/08/24/SpringBoot%E7%BB%8F%E5%85%B8%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/#more">Read More</a>
          </p>
        
      
    </div>
    <footer class="article-footer">
      <a data-url="http://codercheng.cn/2020/08/24/SpringBoot%E7%BB%8F%E5%85%B8%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/" data-id="cko3snvy20020i8uoa79ehnf9" class="article-share-link">Share</a>
      
      
    </footer>
  </div>
  
</article>


  


  <nav id="page-nav">
    
    <a class="extend prev" rel="prev" href="/page/4/">&amp;laquo; 上一页</a><a class="page-number" href="/">1</a><span class="space">&hellip;</span><a class="page-number" href="/page/3/">3</a><a class="page-number" href="/page/4/">4</a><span class="page-number current">5</span><a class="page-number" href="/page/6/">6</a><a class="extend next" rel="next" href="/page/6/">下一页 &amp;raquo;</a>
  </nav>

</section>
        
          <aside id="sidebar">
  
    
  <div class="widget-wrap">
    <h3 class="widget-title">分类</h3>
    <div class="widget">
      <ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/Java/">Java</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/MySql/">MySql</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/Netty/">Netty</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/SpringBoot/">SpringBoot</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/SpringCloud/">SpringCloud</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/SpringMVC/">SpringMVC</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/Tomcat/">Tomcat</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/Zookeeper/">Zookeeper</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E4%BD%9C%E4%B8%9A/">作业</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%88%86%E5%B8%83%E5%BC%8F%E8%B0%83%E5%BA%A6/">分布式调度</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E6%A1%86%E6%9E%B6/">框架</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E7%9F%A5%E8%AF%86/">知识</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/">设计模式</a></li></ul>
    </div>
  </div>


  
    

  
    
  
    
  <div class="widget-wrap">
    <h3 class="widget-title">归档</h3>
    <div class="widget">
      <ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/archives/2024/08/">八月 2024</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2022/09/">九月 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2022/08/">八月 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2022/04/">四月 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2022/02/">二月 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2021/11/">十一月 2021</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2021/06/">六月 2021</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2021/05/">五月 2021</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2021/04/">四月 2021</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2021/03/">三月 2021</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2021/02/">二月 2021</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2021/01/">一月 2021</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2020/12/">十二月 2020</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2020/11/">十一月 2020</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2020/10/">十月 2020</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2020/09/">九月 2020</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2020/08/">八月 2020</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">最新文章</h3>
    <div class="widget">
      <ul>
        
          <li>
            <a href="/2024/08/28/CentOS%E5%86%85%E5%AD%98cpu%E6%8E%92%E6%9F%A5/">CentOS内存cpu排查</a>
          </li>
        
          <li>
            <a href="/2022/09/22/Linux%20%E6%9F%A5%E7%9C%8B%E6%97%A5%E5%BF%97%E5%91%BD%E4%BB%A4/">Linux 查看日志命令</a>
          </li>
        
          <li>
            <a href="/2022/08/30/dubbo%20%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/">dubbo 常见问题</a>
          </li>
        
          <li>
            <a href="/2022/04/26/1%20%E6%BA%90%E7%A0%81%E7%AC%94%E8%AE%B0/">1 源码笔记</a>
          </li>
        
          <li>
            <a href="/2022/02/24/jvisualVM%20%E4%BD%BF%E7%94%A8%E7%AC%94%E8%AE%B0/">jvisualVM 使用笔记</a>
          </li>
        
      </ul>
    </div>
  </div>

  
</aside>
        
      </div>
      <footer id="footer">
  
  <div class="outer">
    <div id="footer-info" class="inner">
      &copy; 2024 CoderCheng<br>
      Powered by <a href="http://hexo.io/" target="_blank">Hexo</a>
    </div>
  </div>
</footer>
    </div>
    <nav id="mobile-nav">
  
    <a href="/" class="mobile-nav-link">Home</a>
  
    <a href="/archives" class="mobile-nav-link">Archives</a>
  
</nav>
    

<script src="//code.jquery.com/jquery-2.0.3.min.js"></script>


  
<link rel="stylesheet" href="/fancybox/jquery.fancybox.css">

  
<script src="/fancybox/jquery.fancybox.pack.js"></script>




<script src="/js/script.js"></script>




  </div>
</body>
</html>